#pragma once
#ifndef __CANDIDATE__H__
#define __CANDIDATE__H__

#include "type.h"

using namespace AllTing::Type;

namespace ATSudokuEngine
{

typedef std::vector<UInt32>					Candidates;
typedef std::vector<UInt32>::iterator		CandidateIterator;
typedef std::vector<UInt32>::const_iterator		CandidateConstIterator;

class Candidate
{
public:
	Candidate()
	{
		vCandidates_.clear();
	}

	Candidate(UInt32 nSize)
	{
		for(UInt32 i=1; i<=nSize; ++i)
		{
			vCandidates_.push_back(i);
		}
	}

	UInt32 Size() const;

	Bool Add(UInt32 nValue);
	Bool Remove(UInt32 nValue);
	
	CandidateIterator Remove(CandidateIterator it);

	CandidateIterator BeginCandidates()
	{
		return vCandidates_.begin();
	}

	CandidateIterator EndCandidates()
	{
		return vCandidates_.end();
	}
protected:
	Candidates vCandidates_;
};

}	// ATSudokuEngine
#endif
